package com.dalin.framework.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.dalin.framework.vos.ColumnBaseInfoVo;

/*****************************************************************************
 * @content: 通用数据库连接接口及此库下的操作方法                                                                              *
 * @author : 那建林                                                                                                                                 *
 * @crtDate: 2009-06-15                                                     *
 * @version: 1.04                                                           *
 ****************************************************************************/
public interface DbConn {
	/*************************************************************************
	 * @content: 测试数据库是否能连接成功
	 * @return : boolean 成功返回true
	 * @author : 那建林
	 * @crtDate: 2010-12-01 14:44:44
	 */
	boolean testConnDatabase() throws Exception;
	
	
	/*************************************************************************
	 * @content: 数据检索,少分页的查询，待完善
	 * @param  : sql查询语句
	 * @return : List<Map>
	 * @author : 那建林
	 * @crtDate: 2009-06-15
	 */
	List<Map> queryData(String sql) throws Exception;
	
	
	/*************************************************************************
	 * @content: 数据更新(增、删、改)
	 * @param  : sql语句
	 * @return : 影响行数
	 * @author : 那建林
	 * @crtDate: 2009-06-15
	 */
	int executeUpdate(String sql) throws Exception;
	
	
	/*************************************************************************
	 * @content: 批量执行sql
	 * @param  : sql语句
	 * @return : 影响行数
	 * @author : 那建林
	 * @crtDate: 2010-12-07 19:39:59
	 * @modDate: 2010-12-07 19:39:59
	 */
	
	
	/*************************************************************************
	 * @content: 检索此数据库或用户下的所有表名
	 * @return : List<String>
	 * @author : 那建林                               
	 * @email  : 190491503@qq.com
	 * @crtDate: 2010-05-11
	 * @modDate: 2010-05-11
	 */
	Set<String> queryTables() throws Exception;
	
	
	/*************************************************************************
	 * @content: 根据表名查询出此表中的字段结构信息
	 * @param  : tableName 表名
	 * @return : List<ColumnBaseInfoVo>
	 * @author : 那建林
	 * @email  : 190491503@qq.com
	 * @crtDate: 2010-05-11
	 * @modDate: 2010-05-11
	 */
	Set<ColumnBaseInfoVo> queryColumnInfosByTable(String tableName) throws Exception;
	
	/*************************************************************************
	 * @content: 根据表名查询出此表中的字段结构信息
	 * @param  : tableName 表名
	 * @return : List<ColumnBaseInfoVo>
	 * @author : 那建林
	 * @email  : 190491503@qq.com
	 * @crtDate: 2010-12-08 12:32:46
	 * @modDate: 2010-12-08 12:32:46
	 */
	ColumnBaseInfoVo findColumnInfoByColumnName(String tableName, String columnName) throws Exception;
	
	/*************************************************************************
	 * @content: 将数据库中的字段类型转换为JAVA类型
	 * @param  : columnType 对应数据库的类型
	 * @param  : columnLength 字段长度
	 * @param  : decimalDigits 小数位数
	 * @return : List<字段信息>
	 * @author : 那建林
	 * @crtDate: 2009-10-02
	 */
	String getJavaTypeFromColumnType(
			String columnType, int columnLength, int decimalLength) throws Exception;
	
	
	/*************************************************************************
	 * @content: 添加表字段
	 * @param  : tableName 表名
	 * @param  : columnName 字段名
	 * @param  : columnType 对应数据库的类型
	 * @param  : columnLength 字段长度
	 * @param  : nullable 是否可以为空
	 * @return : void
	 * @author : 那建林
	 * @crtDate: 2010-12-07 18:02:25
	 * @modDate: 2010-12-07 18:02:25
	 */
	void addColumn(String tableName, 
						String columnName,
						String columnType,
						Integer columnLength,
						boolean nullable) throws Exception;
	
	
	/*************************************************************************
	 * @content: 修改表字段
	 * @param  : tableName 表名
	 * @param  : originalColumnName 原字段名
	 * @param  : newColumnName 新字段名
	 * @param  : columnType 对应数据库的类型
	 * @param  : columnLength 字段长度
	 * @param  : nullable 是否可以为空
	 * @return : void
	 * @author : 那建林
	 * @crtDate: 2010-12-07 18:02:25
	 * @modDate: 2010-12-07 18:02:25
	 */
	void alterColumn(String tableName, 
						String originalColumnName,
						String newColumnName,
						String columnType,
						Integer columnLength,
						boolean nullable) throws Exception;
	
	/*************************************************************************
	 * @content: 删除表字段
	 * @param  : tableName 表名
	 * @param  : columnName 新字段名
	 * @return : void
	 * @author : 那建林
	 * @crtDate: 2010-12-09 23:38:22
	 * @modDate: 2010-12-09 23:38:22
	 */
	void dropColumn(String tableName, String columnName) throws Exception;
	
	/*************************************************************************
	 * @content: 持久化实体
	 * @param  : entity 实体对象
	 * @return : Serializable
	 * @author : 那建林
	 * @crtDate: 2011-09-28 19:00:13
	 * @modDate: 2011-09-28 19:00:13
	 */
	Serializable createObj(Object entity) throws Exception;
}
